// pages/mbti/mbti.js
import AI from '../../utils/ai';
import DB from '../../utils/db';

const TYPE_MAP = {
  EI: ['E', 'I'],
  SN: ['S', 'N'],
  TF: ['T', 'F'],
  JP: ['J', 'P']
}

Page({
  data: {
    loading: true,
    showResult: false,
    questions: [],
    current: 0,
    scores: { E:0, I:0, S:0, N:0, T:0, F:0, J:0, P:0 },
    result: {}
  },

  onLoad() {
    const then = this
    wx.showModal({
      title: 'MBTI测试提示', // 提示的标题
      content: '请你预留5分钟左右时间进行完成99题选择，中途请勿退出！', // 提示的内容
      // confirmColor: '#f3514f', // 确定按钮的样式
      // 接口调用结束的回调函数（调用成功、失败都会执行）
      complete({ confirm, cancel }) {
        if (confirm) {
          then.initTest()
          // console.log('用户点击了确定')
          return
        }
        if (cancel) {
          wx.reLaunch({
            url: '/pages/AI/index',
          })
          // console.log('用户点击了取消')
        }
      }
    })
    
  },

  async initTest() {
    wx.showLoading({ title: '加载中' })
    DB.select('mbti', { action: 'getQuestions' }).then((resp) => {
      this.setData({ 
        questions: resp.result.data,
        loading: false 
      })
      wx.hideLoading();
    }).catch(() => {
      wx.showToast({ title: '题目加载失败' })
      wx.hideLoading();
    });
  },

  handleSelect(e) {
    const type = e.currentTarget.dataset.type
    const newScores = { ...this.data.scores }
    newScores[type] += 1

    if (this.data.current < this.data.questions.length - 1) {
      this.setData({
        scores: newScores,
        current: this.data.current + 1
      })
    } else {
      this.calculateResult(newScores)
    }
  },

  calculateResult(scores) {
    // 计算类型
    const type = ['EI', 'SN', 'TF', 'JP'].map(pair => {
      const [a, b] = TYPE_MAP[pair]
      return scores[a] >= scores[b] ? a : b
    }).join('')

    // 计算维度百分比
    const detail = Object.entries(TYPE_MAP).map(([dim, types]) => {
      const total = scores[types[0]] + scores[types[1]]
      return {
        dim,
        types,
        values: [
          Math.round((scores[types[0]] / total) * 100),
          Math.round((scores[types[1]] / total) * 100)
        ]
      }
    })

    this.getTypeDesc(type,detail)
    
  },

  getTypeDesc(userInput,detail) {
    wx.showLoading({
      title: '分析中...', // 这里设置提示词
      mask: true // 显示透明蒙层
    });

    const systemPrompt = `# MBTI性格测试助手

    ## 系统提示词
    MBTI性格测试助手是一个基于文本的交互式智能体，旨在通过测试后结果来揭示用户的MBTI性格类型。智能体将引导用户完成测试，并根据用户的选择提供即时的反馈和性格特征解析。
    
    ## 结果
    输出100字内，主要性格类型特性和推荐职业`

    AI.hunyuan("hunyuan-lite", systemPrompt, userInput).then(result => {
      // console.log("AI生成的结果:", result);
      wx.hideLoading();
      this.setData({
        showResult: true,
        result: {
          type:userInput,
          desc: result.replace(/^[\s]+/, ""),
          detail
        }
      })
    })
      .catch(error => {
        console.log(error)
        wx.hideLoading();
        wx.showToast({
          title: '调用AI失败',
          icon: 'error'
        })
      });
    
  },

  resetTest() {
    this.setData({
      showResult: false,
      current: 0,
      scores: { E:0, I:0, S:0, N:0, T:0, F:0, J:0, P:0 }
    })
    this.initTest()
  }
})